// package easyhash 包装哈希散列方法，使其一步完成
package easyhash

import (
	"crypto"
	_ "crypto/md5"
	_ "crypto/sha1"
	_ "crypto/sha256"
	_ "crypto/sha512"
	"io"

	_ "golang.org/x/crypto/blake2b"
	// _ "golang.org/x/crypto/blake2s"
	_ "golang.org/x/crypto/sha3"
)

// EasyHash 使用指定的哈希算法
// crypto.BLAKE2b_256 是速度和安全性非常好哈希算法，推荐使用
func EasyHash(h crypto.Hash, r io.Reader, salt []byte) ([]byte, error) {
	// if salt == nil {
	// 	salt = []byte("=== bing ===")
	// }
	hash := h.New()
	hash.Write(salt)
	_, err := io.Copy(hash, r)
	return hash.Sum(nil), err
}

func MustEasyHash(h crypto.Hash, r io.Reader, salt []byte) []byte {
	data, err := EasyHash(h, r, salt)
	if err != nil {
		panic(err)
	}
	return data
}
